package com.example.houseman.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyuncs.exceptions.ClientException;
import com.example.houseman.util.FileOSSUtil;
import com.org.vo.ResultEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.UUID;

/**
 * The type Upload controller.
 * @author wgq
 */
@RestController
@RequestMapping("/hou/upload")
@Slf4j
@Component
public class UploadController {

    // 阿里云API的内或外网域名

    /**
     * The Endpoint.
     */
    @Value("${aliyun.oss.endpoint}")
    String endpoint;

    // 阿里云API的密钥Access Key ID

    /**
     * The Access key id.
     */
    @Value("${aliyun.oss.accessKeyId}")
    String accessKeyId;

    // 阿里云API的密钥Access Key Secret

    /**
     * The Access key secret.
     */
    @Value("${aliyun.oss.accessKeySecret}")
    String accessKeySecret;

    // 阿里云API的bucket名称

    /**
     * The Bucket name.
     */
    @Value("${aliyun.oss.bucketName}")
    String bucketName;


    /**
     * 共公配套照片添加
     *
     * @param file the file
     * @return string
     */
    @RequestMapping("/uploadHose")
    public String uploadHose(MultipartFile file) {
        System.out.println(file.getOriginalFilename());
        try {
            FileOSSUtil.settingIniOSS(endpoint, accessKeyId, accessKeySecret, bucketName);
            FileOSSUtil.uploadFile(file.getOriginalFilename(), file);
            /*String upload = uploadTemplate.upload(file);*/
            return "http://" + bucketName + "." + endpoint + "/" + file.getOriginalFilename();
        } catch (Exception e) {
            return "上传中遇到错误";
        }
    }

    /**
     * 房屋配套照片添加
     *
     * @param file the file
     * @return string
     */
    @RequestMapping("/uploadRoom")
    public String uploadRoom(MultipartFile file) {
        System.out.println(file + "前");
        try {
            FileOSSUtil.settingIniOSS(endpoint, accessKeyId, accessKeySecret, bucketName);
            FileOSSUtil.uploadFile(file.getOriginalFilename(), file);
            /*String upload = uploadTemplate.upload(file);*/
            System.out.println("http://" + bucketName + "." + endpoint + "/" + file.getOriginalFilename());
            return "http://" + bucketName + "." + endpoint + "/" + file.getOriginalFilename();
        } catch (Exception e) {
            return "上传中遇到错误";
        }
    }


    /**
     * Upload pic result entity.
     *
     * @param file the file
     * @return the result entity
     * @throws IOException     the io exception
     * @throws ClientException the client exception
     */
    @RequestMapping("pic")
    public ResultEntity uploadPic(MultipartFile file) throws IOException, ClientException {
        log.info("文件：" + file.getOriginalFilename());
        String resultStr = "";
        String originalFilename = file.getOriginalFilename();
        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
        String fileNmae = UUID.randomUUID() + substring;

        // 创建上传文件的元信息，可以通过文件元信息设置HTTP header。
        ObjectMetadata meta = new ObjectMetadata();

        // String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
        // 开启文件内容MD5校验。开启后OSS会把您提供的MD5与文件的MD5比较，不一致则抛出异常。
        // meta.setContentMD5(md5);
        // 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成，如果没有扩展名则为默认值application/octet-stream。
        meta.setContentType("jpeg");
        // 设置内容被下载时的名称。
        // meta.setContentDisposition("attachment; filename=\"DownloadFilename\"");
        meta.setContentDisposition("inline");
        // 设置上传文件的长度。如超过此长度，则会被截断，为设置的长度。如不足，则为上传文件的实际长度。
        // meta.setContentLength(content.length());
        // 设置内容被下载时网页的缓存行为。
        //  meta.setCacheControl("Download Action");
        // 设置缓存过期时间，格式是格林威治时间（GMT）。
        // meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
        // 设置内容被下载时的编码格式。
        // meta.setContentEncoding("utf-8");
        // 设置header。
        // meta.setHeader("<yourHeader>", "<yourHeaderValue>");

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 上传文件。
        ossClient.putObject(bucketName, fileNmae, new ByteArrayInputStream(file.getBytes()), meta);

        // 关闭OSSClient。
        ossClient.shutdown();
        resultStr = "http://" + bucketName + "." + endpoint + "/" + fileNmae;
        log.info("resultStr",resultStr);
        return ResultEntity.ok("200", "上传成功", resultStr);

/*
        FileOSSUtil.settingIniOSS(endpoint, accessKeyId, accessKeySecret, bucketName);

        String url = FileOSSUtil.uploadFile(fileNmae, file);
        return ResultEntity.ok("200", "上传成功", url);*/
    }
}
